package ace.module.upms.api.model.dto;

import io.swagger.v3.oas.annotations.media.Schema;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import jakarta.validation.constraints.*;
import jakarta.annotation.Nullable;
import java.io.Serializable;

/**
* 菜单权限 data transform object.
*
* @author Caspar
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Schema(title = UpmsMenuDto.TABLE_DESC)
public class UpmsMenuDto implements Serializable {

  public static final String TABLE_NAME = "upms_menu";
  public static final String TABLE_DESC = "菜单权限";
  public static final String ID_COLUMN_NAME = "id";
  public static final String ID_TITLE = "id";
  public static final String ID_DESC = "";
  public static final String UPMS_APP_ID_COLUMN_NAME = "upms_app_id";
  public static final String UPMS_APP_ID_TITLE = "权限应用id";
  public static final String UPMS_APP_ID_DESC = "";
  public static final String PERMISSION_COLUMN_NAME = "permission";
  public static final String PERMISSION_TITLE = "权限标识";
  public static final String PERMISSION_DESC = "";
  public static final String PARENT_ID_COLUMN_NAME = "parent_id";
  public static final String PARENT_ID_TITLE = "父级菜单";
  public static final String PARENT_ID_DESC = "默认值-0";
  public static final String NAME_COLUMN_NAME = "name";
  public static final String NAME_TITLE = "名称";
  public static final String NAME_DESC = "";
  public static final String ICON_COLUMN_NAME = "icon";
  public static final String ICON_TITLE = "图标";
  public static final String ICON_DESC = "";
  public static final String URI_COLUMN_NAME = "uri";
  public static final String URI_TITLE = "菜单uri";
  public static final String URI_DESC = "";
  public static final String SORT_COLUMN_NAME = "sort";
  public static final String SORT_TITLE = "排序";
  public static final String SORT_DESC = "默认值-0";
  public static final String TYPE_COLUMN_NAME = "type";
  public static final String TYPE_TITLE = "菜单类型";
  public static final String TYPE_DESC = " 1-菜单 2-权限";
  public static final String SHOW_STATUS_COLUMN_NAME = "show_status";
  public static final String SHOW_STATUS_TITLE = "显示状态";
  public static final String SHOW_STATUS_DESC = " 1-显示 2-隐藏";
  public static final String DELETE_FLAG_COLUMN_NAME = "delete_flag";
  public static final String DELETE_FLAG_TITLE = "删除标识";
  public static final String DELETE_FLAG_DESC = "0-未删除";
  public static final String CREATE_TIME_COLUMN_NAME = "create_time";
  public static final String CREATE_TIME_TITLE = "创建时间";
  public static final String CREATE_TIME_DESC = "单位-毫秒";
  public static final String UPDATE_TIME_COLUMN_NAME = "update_time";
  public static final String UPDATE_TIME_TITLE = "更新时间";
  public static final String UPDATE_TIME_DESC = "单位-毫秒";
  public static final String ROW_VERSION_COLUMN_NAME = "row_version";
  public static final String ROW_VERSION_TITLE = "版本号和乐观锁";
  public static final String ROW_VERSION_DESC = "";

  @Schema(title = ID_TITLE, description = ID_DESC)
  private Long id;

  @Schema(title = UPMS_APP_ID_TITLE, description = UPMS_APP_ID_DESC)
  private Long upmsAppId;

  @Size(max = 255)
  @Schema(title = PERMISSION_TITLE, description = PERMISSION_DESC)
  private String permission;

  @Schema(title = PARENT_ID_TITLE, description = PARENT_ID_DESC)
  private Long parentId;

  @Size(max = 255)
  @Schema(title = NAME_TITLE, description = NAME_DESC)
  private String name;

  @Schema(title = ICON_TITLE, description = ICON_DESC)
  private String icon;

  @Schema(title = URI_TITLE, description = URI_DESC)
  private String uri;

  @Schema(title = SORT_TITLE, description = SORT_DESC)
  private Long sort;

  @Schema(title = TYPE_TITLE, description = TYPE_DESC)
  private Integer type;

  @Schema(title = SHOW_STATUS_TITLE, description = SHOW_STATUS_DESC)
  private Integer showStatus;

  @Schema(title = DELETE_FLAG_TITLE, description = DELETE_FLAG_DESC)
  private Long deleteFlag;

  @Schema(title = CREATE_TIME_TITLE, description = CREATE_TIME_DESC)
  private Long createTime;

  @Schema(title = UPDATE_TIME_TITLE, description = UPDATE_TIME_DESC)
  private Long updateTime;

  @Schema(title = ROW_VERSION_TITLE, description = ROW_VERSION_DESC)
  private Long rowVersion;

}